package com.resifind.www.service;

import com.resifind.www.exception.Resp;
import com.resifind.www.po.*;
import com.resifind.www.po.Record;

import java.io.InputStream;
import java.util.List;

/**
 * @author 36069
 */
public interface ClientService {

    /**
     * 更新客户信息
     * <p>
     * 校验客户对象的字段判断更新实名信息还是个人信息。
     * 其中实名信息需要进行正则表达式校验
     * </p>
     *
     * @param client 客户对象
     * @return 返回更新结果
     */
    Resp<String> updateClient(Client client);

    /**
     * 请求充值
     * <p>
     * 校验金额是否合法，金额必须大于0
     * </p>
     *
     * @param clientId 客户id
     * @param amount   充值金额
     * @return 返回请求结果
     */
    Resp<String> recharge(int clientId, double amount);

    /**
     * 查询签到记录
     * <p>
     * 计算连续签到天数。
     * 查询客户的总签到天数。
     * 最后封装为SignInBean对象返回。
     * </p>
     *
     * @param clientId 客户id
     * @return 返回签到记录
     */
    Resp<SignInBean> querySignIn(int clientId);

    /**
     * 根据签到记录集合计算连续签到天数
     *
     * @param recordList 签到记录集合
     * @return 返回连续签到天数
     */
    int calculateContinuousDays(List<Record> recordList);

    /**
     * 根据客户id签到
     * <p>
     * 不可重复签到。
     * 根据连续签到天数计算积分。
     * 增加客户积分。
     * </p>
     *
     * @param clientId 客户id
     * @return 返回签到结果
     */
    Resp<String> signIn(int clientId);

    /**
     * 更新头像
     * <p>
     * 校验文件格式。
     * 重构文件名，防止文件名重复，以及避免浏览器缓存。
     * 保存头像文件到本地和Tomcat的指定路径，同时删除原有的头像文件。
     * 更新数据库中客户的头像文件名。
     * </p>
     *
     * @param clientId    客户id
     * @param fileName    文件名
     * @param inputStream 输入流
     * @return 返回保存的文件名
     */
    Resp<String> updateAvatar(int clientId, String fileName, InputStream inputStream);
}
